package com.cskaoyan.mapper;

import com.cskaoyan.bean.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface UserMapper {

    //     where标签
    User selectUserById(@Param("id") Integer id);


    // if标签
    // 根据id来查询UserList
    // 假如传入的id值大于3000，那么查询所有id比3000大的用户
    // 假如传入的id小于或者等于3000，那么查询id小于等于3000的用户
    List<User> selectUserListById(@Param("id") Integer id);


    // 根据可变的条件来查询用户
    // user中有些成员变量有值，有些成员变量没有值，不确定哪些有值，哪些没有值
    // 当传入User之后，我们要根据传入的成员变量来查询
    // 例如：
    //  1. 当传入的User中只有id的时候， select * from user where id = ?
    // 2. 当传入的User中有id,username,password的时候，select * from user where id = ? and username = ? and password = ?
    // 3.当User中没有任何参数的时候，应该查询所有的User，select * from user
    List<User> selectUserBySelective(@Param("user") User user);


    // choose when otherwise
    // 根据id来查询UserList
    // 假如传入的id值大于3000，那么查询所有id比3000大的用户
    // 否则，查询id小于等于3000的用户
    List<User> selectUserListByIdUseChoose(@Param("id") Integer id);


    // trim
    // 根据user中的id来修改用户
    // 1. id必须要传
    // 2. user中至少有一个除了id之外的其他的字段传入
    // 3. 假如username传入了，那么就要修改username
    // 4. 假如username和password都传了，那么username和password都要修改
    int updateUserByIdSelective(@Param("user") User user);


    // set
    int updateUserByIdSelectiveUseSet(@Param("user") User user);


    //foreach

    // in 查询
    // 传入list
    List<User> selectUserListByIdList(List<Integer> idList);

    //传入数组
    List<User> selectUserListByIdArray(Integer[] idArray);


    // 批量插入
    int insertUserList(@Param("userList") List<User> userList);


    // selectKey
    // 插入一个User，并且同时返回这个User自增的主键
    int insertUserAndReturnId(@Param("user") User user);


    // UseGeneratedKeys
    // 插入一个User，并且同时返回这个User自增的主键
    int insertUserAndReturnIdUseGeneratedKeys(@Param("user") User user);

}
